﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.WindowsAPICodePack.Taskbar;





namespace Emessenger
{
    public partial class Connexion : Window
    {
        public WODXMPPCOMLib.wodXMPPComClass wodXMPP1;

        private int erreur=0;


        public void setErreur(int code, string ErrorText) 
        {
            erreur = code;
            //MessageBox.Show(ErrorText);
        }

        public Connexion()
        {
            InitializeComponent();
            wodXMPP1 = new WODXMPPCOMLib.wodXMPPComClass();
            wodXMPP1.StateChange += new WODXMPPCOMLib._IwodXMPPComEvents_StateChangeEventHandler(wodXMPP1_StateChange);
            wodXMPP1.Connected += new WODXMPPCOMLib._IwodXMPPComEvents_ConnectedEventHandler(wodXMPP1_Connected);
            wodXMPP1.Disconnected += new WODXMPPCOMLib._IwodXMPPComEvents_DisconnectedEventHandler(wodXMPP1_Disconnected);

        }

        
        // correction de l'erreur d'ouverture de la fenetre principal 
        void wodXMPP1_Connected()
        {
            SetStatus();
            //MessageBox.Show(wodXMPP1.VCard.Role);
            //if (wodXMPP1.VCard.Role == "Administrator") 
            {
                ContactListe win = new ContactListe(wodXMPP1);
                win.Show();
                this.Close();
            }
            
        }
        
        void wodXMPP1_Disconnected(int ErrorCode, string ErrorText)
        {
            SetStatus();

            WarningBox warningBox = new WarningBox();
            warningBox.Owner = Window.GetWindow(this);
            warningBox.WindowStartupLocation = WindowStartupLocation.CenterOwner;
            warningBox.text.Text = ErrorText;
            warningBox.ShowDialog();

            //MessageBox.Show(ErrorText+"\nError Code : "+ErrorCode);
            setErreur(ErrorCode, ErrorText);
        }
        
        

        void wodXMPP1_StateChange(WODXMPPCOMLib.StatesEnum OldState)
        {
            SetStatus();
        }

        //Connection Au serveur !!

        bool controle() 
        {
            
            if (LoginBox.Text.Length == 0)
            {
                WarningBox warningBox = new WarningBox();
                //
                warningBox.Owner = Window.GetWindow(this);
                //Centrer la fenetre WarningBox par rapport a la fenetre principal
                warningBox.WindowStartupLocation = WindowStartupLocation.CenterOwner;
                //Donne le focus à la fenêtre warningBox et désactiver la fenêtre parent
                warningBox.text.Text = "\nGive your User Name";
                warningBox.ShowDialog();
                return false;
            }
            if (LoginBox.Text.IndexOfAny(new Char[] {'@'} ) == -1)
			{   //chercher l'existance du nom du serveur
                WarningBox warningBox = new WarningBox();
                warningBox.Owner = Window.GetWindow(this);
                warningBox.WindowStartupLocation = WindowStartupLocation.CenterOwner;
                warningBox.text.Text = "\nGive a correct login  .\n\nExemple of correct login :\nUser_Name@Server_Name";
                warningBox.ShowDialog();
				//MessageBox.Show("Vous n'avez pas donnez un login correcte .\nExemple d'un login correcte: User_Name@Server_Name");
				return false;
			}

            if (textBox1.Password.Length == 0)
            {
                WarningBox warningBox = new WarningBox();
                warningBox.Owner = Window.GetWindow(this); //Preciser le parent de la fenetre

                
                warningBox.WindowStartupLocation = WindowStartupLocation.CenterOwner; //Preciser la position là ou cette fenetre sera ouverte
                warningBox.text.Text = "\nGive your password";
                warningBox.Show();
                //MessageBox.Show("oooops");
                return false;
            }

            return true;
        }
        /*bool controle_ok()
        {
            return true;
        }*/
        

        private void connect(object sender, RoutedEventArgs e)
        {

            if(controle())
            {
                TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Indeterminate);
                wodXMPP1.Login = LoginBox.Text;
                wodXMPP1.Password = textBox1.Password;

                try
                {
                    wodXMPP1.Connect(null);
                }
                catch (Exception ex)
                {

                    //MessageBox.Show(""+ex);
                    textBox1.Password = "";
                } // TODO : a modifier capter les exception generer (/!\diconnect error code) /* c'est fait*/
                
                //Afficher la staut de la connection
                SetStatus();
                
                

                // Attendre un peut jusqu'a la validation des donner avec le serveur (ce n'est pas une version optimiser pas ca marche ;) )
                // correctif elle ne fonctionne pas correctement si les données sont correcte * ralenti la connection :( A ne pas utiliser 
                // TO DO : trouver une autre solution
                /*
                bool _wait = true;
                int i = 0;
                do
                {
                    //Console.Write(".");
                    SetStatus();
                    i++;
                    if (i == 10)
                        _wait = false;
                    System.Threading.Thread.Sleep(500);
                } while (_wait);
                MessageBox.Show("ddeftr " + erreur);
                if (erreur != 0)
                 */
                {
                    ///
                }
            }
        }
        
        //affiche la statut de la connection ()
        private void SetStatus()
        {
            label3.Content = wodXMPP1.get_StateText(wodXMPP1.State)/* + "\n" + wodXMPP1.get_StatusText(wodXMPP1.Status)*/;
        }







        //permetre a l'utilisateur de modifier l'empassement de la fenetre avec un drag & drop
        private void Deplasser_fenetre(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
        	this.DragMove();
        }




        
        // FIN //
  
    }
}